#!/usr/bin/env node
// 上面这行意思就是告诉操作系统我执行自定义命令的时候，帮我用node执行 这个文件
// console.log('test');
// 创建自己的 新建 命令 create /   test-cli create arg1 arg2
import { program } from 'commander';
import inquirer from 'inquirer';      // 命令行工具
import fs from 'node:fs'
import { checkPath, downloadTemplate } from './utils.js'

// 设置版本号，读取package.json中的版本号
let json = JSON.parse(fs.readFileSync('./package.json'))

program.version(json.version)

// // 创建一个命令 项目名是用户输的，变量用 <> 包裹, alias起别名，描述项目，action中返回一个回调函数
program.command('create <projectName>').alias('c').description('创建一个项目').action((projectName) => {
    console.log('创建的项目名', projectName)
    inquirer.prompt([{  // prompt里可以放多个选项
        type: 'input',   // 类型，有input输入框， confirm确认框，list列表选择框，checkbox多选框 等等
        name: 'projectName',   // 返回值的 key
        message: '请输入项目名',   // 输入框的提示信息,
        default: projectName   // 默认值
    },{
        type: 'confirm',
        name: 'isTs',
        message: '是否使用ts模板',
    }]).then(res => {
        console.log(res)  // 返回一个json对象 {projectName: 'xxxx', isTs: true}
        // 判断目录是否存在
        // if(fs.existsSync(res.projectName)){          // 可以封装一个方法
        //     console.log(res.projectName, '目录已存在')
        //     return
        // }
        if(checkPath(res.projectName)){
            console.log(res.projectName, '目录已存在')
            return
        }
        if(res.isTs){
            downloadTemplate('ts')
        } else {
            downloadTemplate('js')
        }
    })
})


program.parse(process.argv)   // 解析命令行参数 arg1 arg2 等
